﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Dominio;
using System.Data.Objects;
using Excepciones;

namespace Servicios
{
    public class RolServiceDataBaseImpl : GenericService<Rol>, IRolService
    {

        private static RolServiceDataBaseImpl instancia = new RolServiceDataBaseImpl();

        private RolServiceDataBaseImpl() : base() { }

        public static RolServiceDataBaseImpl ObtenerInstancia()
        {
            return instancia;
        }

        protected override ObjectSet<Rol> GetObjectSet(DominioContainer ctx)
        {
            return ctx.Roles;
        }


        public void Modificar(Rol rol)
        {
            using (DominioContainer ctx = new DominioContainer())
            {
                Rol r = null;
                try
                {
                    r = ctx.Roles.First(ro => ro.Id == rol.Id);
                }
                catch (Exception ex)
                {
                    throw new DataBaseException("Rol no existente en la base de datos.");
                }
                if (r == null)
                {
                    throw new DataBaseException("No existe un rol con id " + rol.Id + " en la base de datos.");
                }
                r.Nombre = rol.Nombre;

                ctx.SaveChanges();
            }
        }

        public Rol ObtenerPorId(int id)
        {
            using (DominioContainer ctx = new DominioContainer())
            {
                try
                {
                    Rol rol = ctx.Roles.First(r => r.Id == id);
                    return rol;
                }
                catch (Exception ex)
                {
                    throw new DataBaseException();
                }
            }
        }

        public Rol ObtenerPorNombre(string nom)
        {
            using (DominioContainer ctx = new DominioContainer())
            {
                try
                {
                    Rol rol = ctx.Roles.First(r => r.Nombre == nom);
                    return rol;
                }
                catch (Exception ex)
                {
                    throw new DataBaseException();
                }
            }
        }

    }
}
